package pe.com.bvl.listener;

import java.io.File;
import java.io.IOException;
import java.util.Properties;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.io.FileUtils;
import org.json.simple.JSONObject;
import org.springframework.core.io.support.PropertiesLoaderUtils;

public class ContextInitializer implements ServletContextListener {

  private static final String PROPERTIES_FILE = "resources.properties";
  private static final String TOKEN_CANAL = "canal.";
  private static final String JS_FILE = "/js/constantes.js";

  public void contextDestroyed(ServletContextEvent context) {
  }

  public void contextInitialized(ServletContextEvent context) {
    StringBuilder data = new StringBuilder();
    getCanalesJS(data);
    escribirArchivoJS(context.getServletContext().getRealPath(JS_FILE), data.toString());
  }

  @SuppressWarnings("unchecked")
  private void getCanalesJS(StringBuilder data) {
    Properties props = getPropertiesFile();

    if (props != null) {
      JSONObject canales = new JSONObject();
      for (Object key : props.keySet()) {
        String keyStr = key.toString();
        if (keyStr.startsWith(TOKEN_CANAL)) {
          canales.put(keyStr, props.getProperty(keyStr));
        }
      }
      data.append("var canales = " + canales.toString() + ";");
    }
  }

  private Properties getPropertiesFile() {
    try {
      return PropertiesLoaderUtils.loadAllProperties(PROPERTIES_FILE);
    } catch (IOException e) {
      System.out.println("No se pudo encontrar el archivo: " + PROPERTIES_FILE + ", " + e.getMessage());
      return null;
    }
  }

  private void escribirArchivoJS(String rutaArchivo, String data) {
    try {
      File archivoJS = new File(rutaArchivo);
      File folderJS = archivoJS.getParentFile();
      folderJS.mkdirs();
      if (!archivoJS.exists()) {
        archivoJS.createNewFile();
      }
      FileUtils.fileWrite(archivoJS.getAbsolutePath(), data.toString());
    } catch (Exception e) {
      System.out.println("No se pude escribir el archivo: " + JS_FILE + ", " + e.getMessage());
    }
  }

}
